package com.mokairui.design.creatormodel.singleton.demo3;

/**
 * @Program: basic-summary
 * @Description: 懒汉式：双重检查锁方式，在多线程情况下可能会出现控制针问题，使用volatile可以解决
 * @Author Mokairui
 * @Date 2021/5/30 21:33
 */
public class Singleton {
    private Singleton() {}
    private static volatile Singleton instance;
    public static Singleton getInstance() {
        // 第一次判断，如果instance的值不为null，不需要抢占锁，直接返回对象
        if (instance == null) {
            synchronized (Singleton.class) {
                // 抢到锁之后再判断实例是否为空
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
